﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace AMVCommander
{
    public partial class FormEditMusic : Form
    {
        bool bOk = false;
        public Music val;
        Music editItem;
        Music[] exVal;

        public FormEditMusic()
        {
            InitializeComponent();
        }

        public bool ShowDialogEdit(Music editItem, Music[] exVal)
        {
            this.editItem = editItem;
            this.exVal = exVal;
            bOk = false;

            #region *** заполнение списка авторов музыки ***

            List<String> musAutorL = Gl.DB.GetAllMusicAutors();

            // дозаполняем из текущего списка
            for (int i = 0; i < exVal.Length; i++)
            {
                if (musAutorL.IndexOf(exVal[i].Author) == -1) musAutorL.Add(exVal[i].Author);
            }
            musAutorL.Sort();
            cbxAuthor.Items.Clear();
            for (int i = 0; i < musAutorL.Count; i++)
                cbxAuthor.Items.Add(musAutorL[i]);

            #endregion *** заполнение списка авторов ***

            cbxAuthor.Text = editItem.Author;
            txbMusic.Text = editItem.Name;

            ShowDialog();
            return bOk;
        }

        public bool ShowDialogAdd(string Author, string Music, Music[] exVal)
        {
            this.editItem = null;
            this.exVal = exVal;
            bOk = false;

            #region *** заполнение списка авторов музыки ***

            List<String> musAutorL = Gl.DB.GetAllMusicAutors();

            // дозаполняем из текущего списка
            for (int i = 0; i < exVal.Length; i++)
            {
                if (musAutorL.IndexOf(exVal[i].Author) == -1) musAutorL.Add(exVal[i].Author);
            }
            musAutorL.Sort();
            cbxAuthor.Items.Clear();
            for (int i = 0; i < musAutorL.Count; i++)
                cbxAuthor.Items.Add(musAutorL[i]);

            #endregion *** заполнение списка авторов ***


            cbxAuthor.Text = Author;
            txbMusic.Text = Music;
            
            ShowDialog();
            return bOk;
        }

        private void txb_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.IsInputKey = false;
                if (sender.GetType() != typeof(ComboBox))
                {
                    cbxAuthor.Focus();
                    cbxAuthor.SelectAll();
                }
                else
                {
                    // проверки
                    string atr = cbxAuthor.Text.Trim();
                    string msc = txbMusic.Text.Trim();
                    if (atr == "") { MessageBox.Show("Поле 'Автор' не может быть пустым"); return; }
                    if (msc == "") { MessageBox.Show("Поле 'Название' не может быть пустым"); return; }
                    if (!CheckAuthorAndMusicName(atr, msc)) { MessageBox.Show("Такая музыка уже существует"); return; }

                    val = new Music(atr, msc);
                    bOk = true;
                    Close();
                }
            }

            if (e.KeyCode == Keys.Right && sender.GetType() == typeof(ComboBox))
            {
                e.IsInputKey = false;
                string txt = cbxAuthor.Text.Trim().ToUpper();
                if (txt != "")
                {
                    for (int i = 0; i < cbxAuthor.Items.Count; i++)
                    {
                        string s = cbxAuthor.Items[i].ToString();
                        if (s.Length < txt.Length) continue;
                        if (s.Substring(0, txt.Length).ToUpper() == txt)
                        {
                            cbxAuthor.Text = s;
                            break;
                        }
                    }
                }
            }

            if (e.KeyCode == Keys.Escape) { e.IsInputKey = false; Close(); }

        }

        bool CheckAuthorAndMusicName(String atr, String msc)
        {
            if (editItem != null)
                if (editItem.Author.ToUpper() == atr.ToUpper() && editItem.Name.ToUpper() == msc.ToUpper())
                    return true;

            for (int i = 0; i < exVal.Length; i++)
            {
                if (exVal[i].Author.ToUpper() == atr.ToUpper() && exVal[i].Name.ToUpper() == msc.ToUpper())
                    return false;
            }
            return true;
        }

        private void FormEditMusic_Shown(object sender, EventArgs e)
        {
            txbMusic.Focus();
            txbMusic.SelectAll();
        }

    }
}
